import install from './install.js';
import createMatcher from './create-match.js';
import HashHistory from './history/hash.js';

export default class VueRouter {
    constructor (options) {
        // 1, 什么叫路由？ 根据不同的 URL 在页面上渲染对应的组件


        // 将用户传递的 routers 转为插件好维护的结构

        // 创建匹配器， 其有两个方法 match 和 addRouters
        // match 负责匹配路径  如： {'/': '记录', '/about': '记录'}
        // addRoutes 动态添加路由配置
        this.matcher = createMatcher(options.routes || []);

        // 创建路由系统 this.$router.push this.$route
        this.mode = options.mode || 'hash'; // 根据模式创建不同的路由对象
        
        this.history = new HashHistory(this);
    
    }
    init () { // app 表示 new Vue
        // 1, 如何初始化，根据当前路径显示指定的组件
        // 2, 监听后续路由变化
        const history = this.history;
        const setupHashLister = () => {
            history.setupListener();
        }
        history.transitionTo(history.getCurrentLocation(), setupHashLister);
        
    }
    match (location) {
        return this.matcher.match(location);
    }
};

// 给插件添加 install 方法， Vue.use() 这个api 会调用该方法
VueRouter.install = install;
